#include "exti0.h"

#if USE_EXTI_0
/**
 * @desc  : 外部中断0初始化函数
 * @date  : 2025-02-13
 * @author: AnRui
 */
void exti0_init() {
    /************************************exit general config*************************************/
    // 外部中断初始化 使用的系统时钟
    rcu_periph_clock_enable(RCU_SYSCFG);
    // 中断初始化 exti_trig 触发条件
    exti_init(EXTI_0, EXTI_INTERRUPT, EXTI0_TRIG);
    // 中断优先级
    nvic_irq_enable(EXTI0_IRQn, EXTI0_NVIC);
    // 外部中断使能
    exti_interrupt_enable(EXTI_0);
    // 清除中断标志位
    exti_interrupt_flag_clear(EXTI_0);

    /************************************exit hard config*************************************/
    if (!EXTI0_SW) {
        // 外部中断线路 只有硬实现需要
        syscfg_exti_line_config(EXTI0_SRC_PORT, EXTI0_SRC_PIN);
        /******gpio config******/
        rcu_periph_clock_enable(EXTI0_PORT_RCU);
        gpio_mode_set(EXTI0_PORT, GPIO_MODE_INPUT, EXTI0_PUPD, EXTI0_PIN);
    }
}

/**
 * @desc  : 外部中断0回调函数
 * @date  : 2025-02-13
 * @author: AnRui
 */
void EXTI0_IRQHandler() {
    if (SET == exti_interrupt_flag_get(EXTI_0)) {
        exti_interrupt_flag_clear(EXTI_0);
        exti0_on_trig();
    }
}

#endif